const fs = require('fs');
const FILETYPE={
   'jpg': 'image/jpeg',
   'jpeg': 'image/jpeg',
    'png': 'image/png',
    'gif':'image/gif',
    'rar':'application/octet-stream',
    'zip':'application/zip',
    'pdf':'application/pdf',
    'txt':'text/plain'
}
let isfile;//是否有上传文件
let options;//上传选项


module.exports= {

    /**
     * 上传文件
     * @param option [Object]
     *     {
     *          type:[string] 文件格式,多个用逗号分隔  eg:'jpg,gif,png'
     *          path:[string] //上传路径，路径需存在,路径相对项目根目录  以/开头
     *     }
     * @return {Object} 如没有上传成功任何文件，返回false
     *      {
     *          文件域name:['保存后的文件路径','保存后的文件路径',],
     *          文件域name:['保存后的文件路径','保存后的文件路径',],
     *          ...
     *      }
     */

    up:function (option) {
        options={
           'type':!option || !option.type?"jpg,jpeg,png,gif,txt":option.type,//文件格式
           'path':!option || !option.path?"/upload":option.path //上传路径，路径需存在,路径相对项目根目录
        }

        isfile=false;
        var files=CTX.request.files;
        var res={};
        for (let i in files) {
            res[i]=[];
            if(Object.prototype.toString.call(files[i]) == '[object Array]'){//判断是否是一个文件域多文件上传
                for(let k of files[i]){
                    let upres=up(k)
                    if(upres)res[i].push(upres);
                }
            }else {
                let upres=up(files[i]);
                if(upres)res[i].push(upres);
            }
        }
        return isfile?res:false;
    }
}


function up(file){
    if(file.size<1)return;
    try{
        // 创建可读流
        const reader = fs.createReadStream(file.path);
        let filetype=file.name.split('.');
        let type=filetype[filetype.length-1];
        let filename=Date.now().toString()+parseInt(Math.random()*1000)+'.'+type;//生成上传文件名称

        if(file.type!= FILETYPE[type] || options.type.indexOf(type)<0){
            return;
        }

        let dirname=AppPath+options.path+'/'+new Date().toLocaleDateString().replace(/-/g,'');//生成文件夹名
        let filePath =  dirname+'/'+filename;// 生成上传文件路径
        if(!fs.existsSync(dirname))fs.mkdirSync(dirname);//生成文件夹

        // 创建可写流
        const upStream = fs.createWriteStream(filePath);
        // 可读流通过管道写入可写流
        reader.pipe(upStream);
        isfile=true;
        return filePath;
    } catch (e){
        console.log(e)
        return;
    }
}